package com.hsqyz.common.utils.file;

import org.springframework.web.multipart.MultipartFile;

import java.util.Arrays;
import java.util.List;

/**
 * 文件类型工具类
 *
 * @author lcz
 */
public class FileTypeUtils {

    // 支持的图片格式
    private static final List<String> IMAGE_EXTENSIONS = Arrays.asList("jpg", "jpeg", "png", "gif", "bmp", "webp");

    // 支持的视频格式
    private static final List<String> VIDEO_EXTENSIONS = Arrays.asList("mp4", "avi", "mov", "mkv", "wmv", "flv", "mpeg", "mpg");

    // 支持的文档格式
    private static final List<String> DOCUMENT_EXTENSIONS = Arrays.asList("doc", "docx", "pdf", "txt", "xls", "xlsx", "ppt", "pptx", "odt", "ods", "odp");

    // 支持的音频格式
    private static final List<String> AUDIO_EXTENSIONS = Arrays.asList("mp3", "wav", "ogg", "aac", "flac", "m4a");

    // 支持的压缩文件格式
    private static final List<String> ARCHIVE_EXTENSIONS = Arrays.asList("zip", "rar", "7z", "tar", "gz", "bz2");

    /**
     * 判断 MultipartFile 的类型。
     *
     * @param file 上传的文件
     * @return 文件类型，"image", "video", "document", "audio", "archive" 或 null（如果未匹配到任何已知类型）
     */
    public static String getFileType(MultipartFile file) {
        if (file == null || file.isEmpty()) {
            throw new IllegalArgumentException("MultipartFile 不能为空");
        }

        // 获取文件名和扩展名
        String originalFilename = file.getOriginalFilename();
        if (originalFilename == null) {
            throw new IllegalArgumentException("文件名不能为空");
        }

        // 获取文件扩展名并转换为小写
        String extension = getExtension(originalFilename).toLowerCase();

        // 判断文件类型
        if (IMAGE_EXTENSIONS.contains(extension)) {
            return "image";
        } else if (VIDEO_EXTENSIONS.contains(extension)) {
            return "video";
        } else if (DOCUMENT_EXTENSIONS.contains(extension)) {
            return "document";
        } else if (AUDIO_EXTENSIONS.contains(extension)) {
            return "audio";
        } else if (ARCHIVE_EXTENSIONS.contains(extension)) {
            return "archive";
        } else {
            return null; // 如果未匹配到任何已知类型
        }
    }

    /**
     * 获取文件的扩展名。
     *
     * @param filename 文件名
     * @return 文件扩展名
     */
    private static String getExtension(String filename) {
        int lastDotIndex = filename.lastIndexOf('.');
        if (lastDotIndex > 0 && lastDotIndex < filename.length() - 1) {
            return filename.substring(lastDotIndex + 1);
        }
        return "";
    }

    public static void main(String[] args) {
        try {
            // 创建一个空byte 数组
            byte[] bytes = new byte[1024];
            // 示例 MultipartFile 对象
            MultipartFile file = MultipartFileConverter.convertByteToMultipartFile(bytes, "image", "ok.zip", "image/jpg"); // 你的 MultipartFile 对象

            // 获取文件类型
            String fileType = FileTypeUtils.getFileType(file);

            // 输出文件类型
            if (fileType != null) {
                System.out.println("文件类型: " + fileType);
            } else {
                System.out.println("未知文件类型");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}